package Cliente;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import javax.swing.JOptionPane;


/**
 *Contiene la informaci&oacute;n de una tarea. La implementar&aacute;n
 * los clientes como un vector de tareas.
 * 
 * @author Juanma
 * 
 */
public class Tarea 
{
    private String mensaje;
    private enum estado{CREADA, FINALIZADA, DESARROLLO, ESPERA};
    private estado estadoTarea;
    private String responsable;
    private String creador;
    private Date fechaInicio = new Date();
    private Date fechaFin = new Date();
    private String titulo;
    private int id;

    /**
     * Constructor de la clase que inicializa la informaci&oacute;n
     * de la tarea.
     *
     * @param id Identificador de la tarea, deber ser igual o mayor que cero.
     * @param estadoRecibido El estado con el que se crea la tarea.
     * @param mensaje Mensaje adjunto a la tarea.
     * @param titulo Titulo asignado a la tarea.
     * @param responsable El responsable de la tarea. Puede ser distinto al creador.
     * @param creador El usuario que ha creado la tarea.
     * @param fechaInicio Cadena con la fecha de inicio de la tarea en el formato "DD/MM/AAAA".
     * @param fechaFin Cadena con la fecha de finalizaci&oacute;n de la tarea en el formato "DD/MM/AAAA".
     */
    public Tarea(int id, String estadoRecibido, String fechaInicio, String fechaFin, String titulo,
            String mensaje, String responsable, String creador )
    {

        this.mensaje = mensaje;
        this.responsable = responsable;
        this.creador = creador;
        this.estadoTarea = estado.CREADA;
        this.titulo = titulo;
        if (!setId(id)) id = -1;  //Se intenta establecer el id, si no, -1

        //Almacenamos las fechas
        SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
        try{
            this.fechaInicio = sdf.parse(fechaInicio);
            this.fechaFin = sdf.parse(fechaFin);
        }
        catch(ParseException e){
            JOptionPane.showMessageDialog(null, 
                    "Error en las fechas",
                    "Error en el formato de las fechas.\n"+
                    e.getMessage(),
                    JOptionPane.ERROR_MESSAGE);
        }

        //Establecemos el estado recibido
        if (estadoRecibido.equals("Creada"))
            this.estadoTarea = estado.CREADA;
        else if (estadoRecibido.equals("Finalizada"))
            this.estadoTarea = estado.FINALIZADA;
        else if (estadoRecibido.equals("Espera"))
            this.estadoTarea = estado.ESPERA;
        else if (estadoRecibido.equals("Desarrollo"))
            this.estadoTarea = estado.DESARROLLO;

    }


    /**
     * Devuelve el identificador (id) de la tarea.
     *
     * @return Identificador de la tarea
     */
    public Integer getId()
    {
        return id;
    }

    /**
     * Modifica el id de una tarea.
     *
     * @param nuevoId Nuevo identificador de la tarea.
     *
     * @return Verdadero si se ha cambiado correctamente, falso en otro caso.
     */
    public boolean setId(int nuevoId)
    {
        if (nuevoId >= 0){
            id = nuevoId;
            return true;
        }
        else return false;
    }

    /**
     * Cambia el mensaje del objeto por el que se pasa como par&aacute;metro.
     *
     * @param mensaje Nuevo mensaje.
     */
    public void setMensaje(String mensaje){
        this.mensaje = mensaje;
    }

    /**
     * Cambia el t&iacute;tulo de la tarea.
     *
     * @param titulo Nuevo titulo.
     */
    public void setTitulo(String titulo)
    {
        this.titulo = titulo;
    }

    /**
     * Cambia la fecha de inicio de una tarea.
     *
     * @param fechaInicio Cadena con la nueva fecha de inicio de la tarea. El
     *                      formato debe ser "dd/mm/aaaa"
     */
    public void setFechaInicio(String fechaInicio)
    {
        try{
            SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
            this.fechaInicio = sdf.parse(fechaInicio);
        }
        catch(ParseException e){
            JOptionPane.showMessageDialog(null,
                    "Error en las fechas",
                    "Error en el formato de las fechas.\n"+
                    e.getMessage(),
                    JOptionPane.ERROR_MESSAGE);
        }
    }


     /**
     * Cambia la fecha de fin de una tarea.
     *
     * @param fechaFin Cadena con la nueva fecha de fin de la tarea. El
     *                      formato debe ser "dd/mm/aaaa"
     */
    public void setFechaFin(String fechaFin)
    {
        try{
            SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
            this.fechaFin = sdf.parse(fechaFin);
        }
        catch(ParseException e){
              JOptionPane.showMessageDialog(null,
                    "Error en las fechas",
                    "Error en el formato de las fechas.\n"+
                    e.getMessage(),
                    JOptionPane.ERROR_MESSAGE);
        }
    }
    

    /**
     * Cambia el estado de la tarea.
     *
     * @param estado Cadena con el nuevo estado de la tarea. Los nuevos valores
     *               son:
     *                  "creada" "finalizada" "desarrollo" "espera"
     */
    public void setEstado(String nuevoEstado){
        if (nuevoEstado.equals("Creada"))
            this.estadoTarea = estado.CREADA;
        if (nuevoEstado.equals("Finalizada"))
            this.estadoTarea = estado.FINALIZADA;
        if (nuevoEstado.equals("Desarrollo"))
            this.estadoTarea = estado.DESARROLLO;
        if (nuevoEstado.equals("Espera"))
            this.estadoTarea = estado.ESPERA;
    }

    /**
     * Modifica el responsable de la tarea.
     *
     * @param nuevoResponsable Cadena con el nombre del usuario que ser&aacute;
     *                         el nuevo responsable de la tarea.
     */
    public void setResponsable(String nuevoResponsable){
        this.responsable = nuevoResponsable;
    }

    /**
     * Modifica el creador de la tarea.
     *
     * @param nuevoResponsable Cadena con el nombre del usuario que ser&aacute;
     *                         el nuevo responsable de la tarea.
     */
    public void setCreador(String nuevoCreador){
        this.creador = nuevoCreador;

    }

    /**
     * Devuelve el mensaje asociado a la tarea.
     *
     * @return Devuelve una cadena con el mensaje de la tarea.
     */
     public String getMensaje(){
        return this.mensaje;
    }


     /**
     * Devuelve el t&iacute;tulo asociado a la tarea.
     *
     * @return Devuelve una cadena con el t&iacute;tulo de la tarea.
     */
     public String getTitulo(){
        return this.titulo;
    }

     /**
      * Devuelve el estado de la tarea.
      *
      * @return Cadena con el estado de la tarea.
      */
    public String getEstado()
    {
        if (estadoTarea == estado.CREADA)
            return "Creada";
        else if (estadoTarea == estado.DESARROLLO)
            return "Desarrollo";
        else if (estadoTarea == estado.FINALIZADA)
            return "Finalizada";
        else if (estadoTarea == estado.ESPERA)
            return "Espera";
        else
            return null;

    }

    /**
     * Devuelve el usuario responsable de la tarea.
     *
     * @return Cadena con el usuario responsable de la tarea.
     */
    public String getResponsable(){
        return this.responsable;
    }

    /**
     * Devuelve el usuario creador de la tarea.
     *
     * @return Cadena con el usuario creador de la tarea.
     */
    public String getCreador(){
        return this.creador;
    }

    /**
     * Devuelve una cadena con la fecha de inicio de la tarea.
     * 
     * @return Cadena con la fecha de inicio de la tarea con el formato "dd/mm/aaaa".
     */
    public String getFechaInicio()
    {
        DateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
        try{
            return sdf.format(fechaInicio);

        }
        catch(NullPointerException e)
        {
            return "";
        }
    }

     /**
     * Devuelve una cadena con la fecha de fin de la tarea.
     *
     * @return Cadena con la fecha de fin de la tarea con el formato "dd/mm/aaaa".
     */
    public String getFechaFin()
        {
        DateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
        try{
            return sdf.format(fechaFin);
            
        }
        catch(NullPointerException e)
        {
            return "";
        }
    }


}
